<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //          try...catch
        // try{}catch(e){}finally{}
        // Error.name的六种值对应的信息：
        // 1.EvalError: eval()的使用与定义不一致
        // 2.RangeError: 数值越界
        // 3.ReferenceError:非法或不能识别的引用数值
        // 4.SyntxError: 发生语法解析错误
        // 5.TypeError: 操作数类型错误
        // 6.URIError: URI处理函数使用不当


        // try里面有错误不终止程序，不会执行错误后try里面的代码，但不影响程序后续代码的执行
        // catch的作用是把try里面的错误捕捉到，打印到控制台
        // try {
        //     console.log('a');
        //     console.log(b);
        //     console.log('c');
        // } catch (e) { //error   error.message  error.name --> error
        //     console.log(e.name + ' : ' + e.message);
        // }
        // console.log('d');


        //         ES5严格模式
        // "use strict"
        //      不在兼容es3的一些不规则语法。使用全新的es5规范。
        //      两种用法：
        //          全局严格模式
        //          局部函数内严格模式（推荐）
        //      就是一串字符串，不会对不兼容严格模式的浏览器产生影响。
        //      不支持with.arguements .callee .func.caller,*变量赋值前必须声明，局部this
        //      必须被赋值(Person.call(null/undefined)赋值什么就是什么)，拒绝重复属性和参数

        // var obj = {
        //     name: 'ab'
        // }
        // var name = 'window';
        // function test(){
        //     var name = 'scope';
        //     with(obj){//with会让这个对象作为作用域链的最顶端
        //         console.log(name);
        //     }
        // }
        // test();


        // es3都不能用
        // "use strict";
        // var a = 123;
        // eval('console.log(a)') //eval里面的东西可以把字符串当代码用
    </script>
</body>

</html>